/**
 * \* Created with IntelliJ IDEA.
 * \* User: 冯若航
 * \* Date: 2021/7/3
 * \* Time: 18:17
 * \* To change this template use File | Settings | File Templates.
 * \* Description:
 * \
 */
public class 编辑距离 {
    public int minDistance(String word1, String word2) {
        int n1=word1.length();
        int n2=word2.length();
        int[][] dp=new int[n1+1][n2+1];
        //base case
        for(int i=1;i<=n1;i++){
            dp[i][0]=i;
        }
        for(int i=1;i<=n2;i++){
            dp[0][i]=i;
        }

        //down to top
        for(int i=1;i<=n1;i++){
            for(int j=1;j<=n2;j++){
                //位置i和位置j的字符一样，什么都不做，步数不变
                if(word1.charAt(i-1)==word2.charAt(j-1)){
                    dp[i][j]=dp[i-1][j-1];
                }else {
                    //dp[i-1][j] 删除位置i的字符，前移i继续与j比较
                    //dp[i][j-1] 在i后插入字符，前移j继续与i比较
                    //dp[i-1][j-1] 把i处的字符替换为和j处一样，此时i和j同时前移继续比较
                    dp[i][j]=Math.min(Math.min(dp[i-1][j],dp[i][j-1]),dp[i-1][j-1])+1;
                }
            }
        }
        return dp[n1][n2];
    }
}